﻿#ifndef __WEAPONBANK_H__
#define __WEAPONBANK_H__
#include"Bullet.h"
#include<QVector>
#include<QTimer>
class Sprite;
//武器库管理
class WeaponBank :public Bullet
{
public:
    WeaponBank();
    WeaponBank(int max, QObject* parent = nullptr);
    //~WeaponBank() = default;
    void init();
    //添加一个子弹
    void addBullet(const QPoint& point);
    void addBullet(const int x,const int y);
    //添加一个导弹
    void addGuidedMissile(const int x, const int y, Sprite& player);

    void update();
    void draw(QPainter* painter);    
    //设置子弹模型名字
    void setBulletFrame(const QString& name);
    //子弹库中的子弹设置边界释放
    virtual bool Collider(const QRect& collider);
    //获取武器库
    QVector<Bullet*>& getBullet();
    //获取导弹的cd时间
    size_t getGuidedMissileCD();
    //获取导弹的剩余cd时间
    qint32 getGuidedMissileCdRemainingTime();
    // 设置导弹的cd时间
    void setGuidedMissileCD(const size_t time);
    //子弹发射间隔定时时间(毫秒)
    void setBulletTimer(const int time);
    //子弹间距调整
    void setBulletinterval(const int val);
    //子弹降级时间(毫秒)
    void setBulletDemotion(const int time);
    //增加子弹级别-是否重置计时
    void addBulletLevel(const int level,bool flag=false);
    //获取子弹降级剩余时间
    const int getBulletLevelRemainingTime();
    //获取子弹级别
    const int getBulletLevel();
    //设置子弹最大级别
    void setMaxBulletLevel(const int level);
    //设置暂停
    virtual void setPause(bool flag);
private:
    //子弹发射间隔定时器触发
    virtual bool TimerTrigger();
    //增加一个子弹
    void addOneBullet(const QVector2D& vector, const int x,const int y);
    void addOneBullet(const QVector2D& vector, const QPoint& point);
    //增加二至四个子弹
    void addTwoBullet(const QPoint& point);
    //增加五个以上子弹
    void addThreeBullet(const QPoint& point);
private:
    QString m_BulletFrameName;
    QVector<Bullet*> m_bullet;//武器库
    int m_max = 50;//弹药库上限一次最大发射数量
    int m_BulletTimer = 200;//子弹发射间隔
    int m_BulletLevel = 1;//子弹级别,数量
    int m_MaxBulletLevel = 7;//子弹级别,数量最大值
    int m_Bulletinterval = 30;//子弹间距
    QTimer m_BulletDemotion;//子弹降级定时器
    QTimer m_GuidedMissileCD;//攻击后冷却
};
#endif // !__BULLET_H__